home *** CD-ROM | disk | FTP | other *** search
/ Floppyshop 2 / Floppyshop - 2.zip / Floppyshop - 2.iso / art&graf.ix / art-0015 / flicker / conv.asm < prev    next >
Assembly Source File  |  1997-04-16  |  2KB  |  126 lines

  1.  
  2.     public _cscreen
  3.  
  4.  
  5.     ; conv_1    -    take 4 words and make them into 16 bytes byte-a-pixel
  6.     public conv_1
  7. conv_1    
  8.     ; first test for all zeroes - this happens a lot and is easy
  9.     move.l    (a1),d3
  10.     bne    doconv
  11.     move.l    4(a1),d3
  12.     bne    doconv
  13.     adda    #8,a1
  14.     move.l    d3,(a0)+
  15.     move.l    d3,(a0)+
  16.     move.l    d3,(a0)+
  17.     move.l    d3,(a0)+
  18.     rts
  19.  
  20.     ;trash all data regs except d0 and d1
  21. doconv
  22.     move.w (a1)+,d3
  23.     move.w (a1)+,d4
  24.     move.w (a1)+,d5
  25.     move.w (a1)+,d6
  26.     move.w #15,d7
  27. conv_loop
  28.     clr.w d2
  29.     asl #1,d3
  30.     bcc co0
  31.     or.w    #1,d2
  32. co0    asl #1,d4
  33.     bcc co1
  34.     or.w    #2,d2
  35. co1    asl #1,d5
  36.     bcc co2
  37.     or.w    #4,d2
  38. co2    asl #1,d6
  39.     bcc co3
  40.     or.w    #8,d2
  41. co3 move.b d2,(a0)+
  42.     dbra d7,conv_loop
  43.     rts
  44.  
  45.  
  46.     ; iconv_1   - inverse convert - take 16 bytes and put them into
  47.     ;    16 pixels in 4 words.
  48.     public iconv_1
  49. iconv_1
  50.     ; first test for all zero
  51.     move.l    (a0),d3
  52.     bne    doiconv
  53.     move.l    4(a0),d3
  54.     bne    doiconv
  55.     move.l    8(a0),d3
  56.     bne    doiconv
  57.     move.l    12(a0),d3
  58.     bne    doiconv
  59.     move.l    d3,(a1)+
  60.     move.l    d3,(a1)+
  61.     adda    #16,a0
  62.     rts
  63.  
  64.     ; trash all registers except d1
  65. doiconv
  66.     move.w #15,d7
  67.     move.w #$8000,d0
  68.     clr.w d3
  69.     move.w     d3,d4
  70.     move.w    d4,d5
  71.     move.w    d5,d6
  72. iconv_loop
  73.     move.b (a0)+,d2
  74.     asr    #1,d2
  75.     bcc ic0
  76.     or.w d0,d3
  77. ic0    asr    #1,d2
  78.     bcc ic1
  79.     or.w d0,d4
  80. ic1    asr    #1,d2
  81.     bcc ic2
  82.     or.w d0,d5
  83. ic2 asr    #1,d2
  84.     bcc ic3
  85.     or.w d0,d6
  86. ic3    lsr.w #1,d0
  87.     dbra d7,iconv_loop
  88.     move.w d3,(a1)+
  89.     move.w d4,(a1)+
  90.     move.w d5,(a1)+
  91.     move.w d6,(a1)+
  92.     rts
  93.  
  94.  
  95.     ;    conv_buf(inbuf, outbuf, words)
  96.     ;        convert words*16  # of pixels from interleave to byte-a-pixel
  97.     public _conv_buf
  98. _conv_buf
  99.     move.l 4(sp),a1
  100.     move.l 8(sp),a0
  101.     move.w 12(sp),d1
  102.     movem.l D2/D3/D4/D5/D6/D7,-(A7) ; save the world
  103.     bra clnz
  104. cln_lp    bsr conv_1
  105. clnz dbra    d1,cln_lp
  106.     movem.l (A7)+,D2/D3/D4/D5/D6/D7
  107.     rts
  108.  
  109.  
  110.     ;    iconv_buf(inbuf, outbuf, words)
  111.     ;        iconvert words*16  # of pixels from byte-a-pixel to interleave
  112.     public _iconv_buf
  113. _iconv_buf
  114.     move.l 4(sp),a0
  115.     move.l 8(sp),a1
  116.     move.w 12(sp),d1
  117.     movem.l D2/D3/D4/D5/D6/D7,-(A7) ; save the world
  118.     bra iclnz
  119. icln_lp    bsr iconv_1
  120. iclnz dbra    d1,icln_lp
  121.     movem.l (A7)+,D2/D3/D4/D5/D6/D7
  122.     rts
  123.  
  124.  
  125.  
  126.